1

上一篇文章中我们介绍了使用EVReflection解析JSON的方法,但是还是用到了SwiftyJSON这样的工具,那么有木有什么办法能够更简单的解决这样的问题EVReflection的作者还为我们提供了AlamofireJsonToObjects这样一个工具,让我们能够更加容易的处理JSON数据

AlamofireJsonToObjects 基于目前使用最广泛的Swift HTTP库Alamofire和我们上次提到的
EVReflection

第三方库导入

我们通过CocoaPods导入

use_frameworks!
pod "AlamofireJsonToObjects"

在用到到Swift文件中import AlamofireJsonToObjects

Demo

作为EVReflection的一个配套工具,它的使用非常简单,我们通过一个Demo一起来学习一下

构建数据模型

根据我们上次写出的数据模型,我们写出整个response的数据模型

import Foundation
import EVReflection
class CityModel:EVObject{
    var city_name = ""
    var city_pinyin = ""
    var short_name = ""
    var short_pinyin = ""
    var city_id = 100010000
}

如下

class CityModelApiResponse:EVObject{
    var cities = [CityModel]()
    var errno = 0;
    var msg = "";
}

发起网络请求

在我们的文件中import AlamofireJsonToObjects
我们这次先对Alamofire的网络请求做一些封装,我们这里使用了泛型以保证通用性
这里不再responseJSON而是responseObject


class func invokeObject< T: EVObject >(
    url:String,
    parameters:[String: AnyObject]? = nil,
    complete:(object: T?, error: NSError?) -> Void){
    Alamofire.request(.GET, ServiceEndpointBase, parameters: nil, encoding: .URL, headers: ["apikey":"ownAPIKey"]).validate(statusCode: 200..<300).responseObject { (URLRequest:NSURLRequest?, HTTPURLResponse:NSHTTPURLResponse?, result:Result< T, NSError>) in
        complete(object: result.value, error: result.error)
    }
}

接下来我们写具体的涉及业务的请求方法


class func getCityListObject(complete:(object: CityModelApiResponse?, error: NSError?) -> Void){
    invokeObject(ServiceEndpointBase,parameters: nil,complete: complete)
}

调用方法及结果

我们在viewDidLoad方法中调用一下我们的网络请求方法


    ServiceProxy.getCityListObject { (object, error) in
        print(object!)
    }

控制台结果如下

CityModelApiResponse {
   hash = 5326178534503437261
   key = cities, value = (
        {
        "city_id" = 100010000;
        "city_name" = "\U5317\U4eac\U5e02";
        "city_pinyin" = beijing;
        "short_name" = "\U5317\U4eac";
        "short_pinyin" = bj;
    },
        {
        "city_id" = 500010000;
        "city_name" = "\U5929\U6d25\U5e02";
        "city_pinyin" = tianjin;
        "short_name" = "\U5929\U6d25";
        "short_pinyin" = tj;
    },
        {
        "city_id" = 1800010000;
        "city_name" = "\U77f3\U5bb6\U5e84\U5e02";
        "city_pinyin" = shijiazhuang;
        "short_name" = "\U77f3\U5bb6\U5e84";
        "short_pinyin" = sjz;
    },
        {
        "city_id" = 1800020000;
        "city_name" = "\U5510\U5c71\U5e02";
        "city_pinyin" = tangshan;
        "short_name" = "\U5510\U5c71";
        "short_pinyin" = ts;
    }
    ...
)
   key = errno, value = 0
   key = msg, value = success
}

AlamofireJsonToObjects不仅提供了responseObject还有responseArray,可以直接导出数组


Hydrogen
2.5k 声望73 粉丝

Write code for fun.